package com.mingqi.hw.test5160;

/** 【数组组成的最小数字】
 * 给定一个整型数组，请从该数组中选择3个元素组成最小数字并输出（如果数组长度小于3，则选择数组中所有元素来组成最小数字）。
 * 输入描述:
 * 一行用半角逗号分割的字符串记录的整型数组，0 < 数组长度 <= 100，0 < 整数的取值范围 <= 10000。
 * 输出描述:
 * 由3个元素组成的最小数字，如果数组长度小于3，则选择数组中所有元素来组成最小数字。
 * 示例1
 * 输入
 * 21,30,62,5,31
 * 输出
 * 21305
 * 说明
 * 数组长度超过3，需要选3个元素组成最小数字，21305由21,30,5三个元素组成的数字，为所有组合中最小的数字
 * 示例2
 * 输入
 * 5,21
 * 输出
 * 215
 * 说明
 * 数组长度小于3， 选择所有元素来主城最小值，215为最小值。
 */
import java.util.Arrays;
import java.util.Comparator;

public class ZT51 {

    public static void main(String[] args) {
        // 示例输入
        String input = "21,30,62,5,31";
        // 将输入字符串分割为数组
        String[] elements = input.split(",");
        int[] nums = new int[elements.length];
        for (int i = 0; i < elements.length; i++) {
            nums[i] = Integer.parseInt(elements[i]);
        }

        // 调用函数并输出结果
        System.out.println(findMinNumber(nums));
    }

    public static String findMinNumber(int[] nums) {
        // 如果数组长度小于3，直接返回所有元素组成的最小数字
        if (nums.length < 3) {
            return String.join("", Arrays.stream(nums).mapToObj(String::valueOf).toArray(String[]::new));
        }

        // 使用自定义比较器对数组进行排序?????????????????????????
       // Arrays.sort(nums, Comparator.comparing((int num) -> String.valueOf(num) + ""));

        // 自定义比较器，用于比较两个元素组成的字符串
        Comparator<Integer> customComparator = (a, b) -> {
            String str1 = a + "" + b;
            String str2 = b + "" + a;
            return str1.compareTo(str2);
        };

        // 冒泡排序的变体，仅用于将前三个元素排序为最小数字
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 3 - i - 1; j++) {
                if (customComparator.compare(nums[j], nums[j + 1]) > 0) {
                    // 交换元素
                    int temp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = temp;
                }
            }
        }

        // 返回前三个元素组成的最小数字
        return String.join("", Arrays.stream(nums, 0, 3).mapToObj(String::valueOf).toArray(String[]::new));
    }
}
